﻿using System;
using System.Collections.Generic;
using System.Text;

using System.Data;
using System.Data.Odbc;
using WLMCoreLibrary;

namespace SAW_Core
{
    public class RegistroHistorial : BaseClass
    {


        #region public properties
        public int idTipoRegistro { get; set; }
        public Boolean entrada { get; set; }
        public Boolean salida { get; set; }
        public int idVenta { get; set; }
        public int idCompra { get; set; }
        public int idProducto { get; set; }
        public int idFactura { get; set; }
        public int idCliente { get; set; }
        public int idProveedor { get; set; }
        public int idCuentaBancaria { get; set; }
        public int idMovimientoBancario { get; set; }
        public int idAlmacen { get; set; }
        public int idVendedor { get; set; }
        public DateTime fechaAplicacion { get; set; }
        public String descripcion { get; set; }
        public Decimal Monto { get; set; }
        public Decimal SaldoInicial { get; set; }
        public Decimal SaldoFinal { get; set; }
        public Decimal Cantidad { get; set; }
        public Decimal StockInicial { get; set; }
        public Decimal StockFinal { get; set; }
        public String referencia { get; set; }
        #endregion

        #region constructors
        public RegistroHistorial(ref dbConnector ConexionDB)
        {
            ConexionDBInterna = ConexionDB;
            WLMClassBinder classBinder = new WLMClassBinder(ref ConexionDBInterna);
            id = classBinder.NewRecord("HISTORIAL");
            string queryString = "";
            queryString = "SELECT * FROM HISTORIAL WHERE id='" + this.id + "'";
            GetRecord(queryString);
        }

        public RegistroHistorial(int registryId, ref dbConnector ConexionDB)
        {
            ConexionDBInterna = ConexionDB;
            string queryString = "";
            queryString = "SELECT * FROM HISTORIAL WHERE id='" + registryId + "'";
            WLMClassBinder classBinder = new WLMClassBinder(ref ConexionDBInterna);
            this.GetRecord(queryString);
        }
        public RegistroHistorial(DataRow dataRow, ref dbConnector ConexionDB)
        {
            ConexionDBInterna = ConexionDB;
            this.GetRecord(dataRow);
        }
        #endregion

        #region public methods


        public void Delete()
        {
            string queryString = "";
            queryString = "DELETE FROM HISTORIAL WHERE id='" + this.id + "'";
            ConexionDBInterna.ExecuteCommand(queryString);

        }
        #endregion

        #region Private Methods
        private void GetRecord(string queryString)
        {
            OdbcDataReader reader = ConexionDBInterna.ExecuteReader(queryString);
            if (reader.HasRows)
            {
                if (!reader.IsDBNull(reader.GetOrdinal("id")))
                    id = (System.Int32)reader["id"];
                if (!reader.IsDBNull(reader.GetOrdinal("fechaCreacion")))
                    fechaCreacion = Convert.ToDateTime(reader["fechaCreacion"]);
                if (!reader.IsDBNull(reader.GetOrdinal("fechaModificacion")))
                    fechaModificacion = Convert.ToDateTime(reader["fechaModificacion"]);
                if (!reader.IsDBNull(reader.GetOrdinal("idUsuario")))
                    idUsuario = (System.Int32)reader["idUsuario"];
                if (!reader.IsDBNull(reader.GetOrdinal("idUsuarioModificacion")))
                    idUsuarioModificacion = (System.Int32)reader["idUsuarioModificacion"];
                if (!reader.IsDBNull(reader.GetOrdinal("idTipoRegistro")))
                    idTipoRegistro = (System.Int32)reader["idTipoRegistro"];
                if (!reader.IsDBNull(reader.GetOrdinal("entrada")))
                    entrada = Convert.ToBoolean(reader["entrada"]);
                if (!reader.IsDBNull(reader.GetOrdinal("salida")))
                    salida = Convert.ToBoolean(reader["salida"]);
                if (!reader.IsDBNull(reader.GetOrdinal("idVenta")))
                    idVenta = (System.Int32)reader["idVenta"];
                if (!reader.IsDBNull(reader.GetOrdinal("idCompra")))
                    idCompra = (System.Int32)reader["idCompra"];
                if (!reader.IsDBNull(reader.GetOrdinal("idProducto")))
                    idProducto = (System.Int32)reader["idProducto"];
                if (!reader.IsDBNull(reader.GetOrdinal("idFactura")))
                    idFactura = (System.Int32)reader["idFactura"];
                if (!reader.IsDBNull(reader.GetOrdinal("idCliente")))
                    idCliente = (System.Int32)reader["idCliente"];
                if (!reader.IsDBNull(reader.GetOrdinal("idProveedor")))
                    idProveedor = (System.Int32)reader["idProveedor"];
                if (!reader.IsDBNull(reader.GetOrdinal("idCuentaBancaria")))
                    idCuentaBancaria = (System.Int32)reader["idCuentaBancaria"];
                if (!reader.IsDBNull(reader.GetOrdinal("idMovimientoBancario")))
                    idMovimientoBancario = (System.Int32)reader["idMovimientoBancario"];
                if (!reader.IsDBNull(reader.GetOrdinal("idAlmacen")))
                    idAlmacen = (System.Int32)reader["idAlmacen"];
                if (!reader.IsDBNull(reader.GetOrdinal("idVendedor")))
                    idVendedor = (System.Int32)reader["idVendedor"];
                if (!reader.IsDBNull(reader.GetOrdinal("fechaAplicacion")))
                    fechaAplicacion = Convert.ToDateTime(reader["fechaAplicacion"]);
                if (!reader.IsDBNull(reader.GetOrdinal("descripcion")))
                    descripcion = (System.String)reader["descripcion"];
                if (!reader.IsDBNull(reader.GetOrdinal("Monto")))
                    Monto = (System.Decimal)reader["Monto"];
                if (!reader.IsDBNull(reader.GetOrdinal("SaldoInicial")))
                    SaldoInicial = (System.Decimal)reader["SaldoInicial"];
                if (!reader.IsDBNull(reader.GetOrdinal("SaldoFinal")))
                    SaldoFinal = (System.Decimal)reader["SaldoFinal"];
                if (!reader.IsDBNull(reader.GetOrdinal("Cantidad")))
                    Cantidad = (System.Decimal)reader["Cantidad"];
                if (!reader.IsDBNull(reader.GetOrdinal("StockInicial")))
                    StockInicial = (System.Decimal)reader["StockInicial"];
                if (!reader.IsDBNull(reader.GetOrdinal("StockFinal")))
                    StockFinal = (System.Decimal)reader["StockFinal"];
                if (!reader.IsDBNull(reader.GetOrdinal("referencia")))
                    referencia = (System.String)reader["referencia"];
            }
        }


        private void GetRecord(DataRow dataRow)
        {
            if (dataRow != null)
            {
                if (dataRow["id"] != null)
                    id = (System.Int32)dataRow["id"];
                if (dataRow["fechaCreacion"] != null)
                    fechaCreacion = (System.DateTime)dataRow["fechaCreacion"];
                if (dataRow["fechaModificacion"] != null)
                    fechaModificacion = (System.DateTime)dataRow["fechaModificacion"];
                if (dataRow["idUsuario"] != null)
                    idUsuario = (System.Int32)dataRow["idUsuario"];
                if (dataRow["idUsuarioModificacion"] != null)
                    idUsuarioModificacion = (System.Int32)dataRow["idUsuarioModificacion"];
                if (dataRow["idTipoRegistro"] != null)
                    idTipoRegistro = (System.Int32)dataRow["idTipoRegistro"];
                if (dataRow["entrada"] != null)
                    entrada = (bool)dataRow["entrada"];
                if (dataRow["salida"] != null)
                    salida = (bool)dataRow["salida"];
                if (dataRow["idVenta"] != null)
                    idVenta = (System.Int32)dataRow["idVenta"];
                if (dataRow["idCompra"] != null)
                    idCompra = (System.Int32)dataRow["idCompra"];
                if (dataRow["idProducto"] != null)
                    idProducto = (System.Int32)dataRow["idProducto"];
                if (dataRow["idFactura"] != null)
                    idFactura = (System.Int32)dataRow["idFactura"];
                if (dataRow["idCliente"] != null)
                    idCliente = (System.Int32)dataRow["idCliente"];
                if (dataRow["idProveedor"] != null)
                    idProveedor = (System.Int32)dataRow["idProveedor"];
                if (dataRow["idCuentaBancaria"] != null)
                    idCuentaBancaria = (System.Int32)dataRow["idCuentaBancaria"];
                if (dataRow["idMovimientoBancario"] != null)
                    idMovimientoBancario = (System.Int32)dataRow["idMovimientoBancario"];
                if (dataRow["idAlmacen"] != null)
                    idAlmacen = (System.Int32)dataRow["idAlmacen"];
                if (dataRow["idVendedor"] != null)
                    idVendedor = (System.Int32)dataRow["idVendedor"];
                if (dataRow["fechaAplicacion"] != null)
                    fechaAplicacion = (System.DateTime)dataRow["fechaAplicacion"];
                if (dataRow["descripcion"] != null)
                    descripcion = (System.String)dataRow["descripcion"];
                if (dataRow["Monto"] != null)
                    Monto = (System.Decimal)dataRow["Monto"];
                if (dataRow["SaldoInicial"] != null)
                    SaldoInicial = (System.Decimal)dataRow["SaldoInicial"];
                if (dataRow["SaldoFinal"] != null)
                    SaldoFinal = (System.Decimal)dataRow["SaldoFinal"];
                if (dataRow["Cantidad"] != null)
                    Cantidad = (System.Decimal)dataRow["Cantidad"];
                if (dataRow["StockInicial"] != null)
                    StockInicial = (System.Decimal)dataRow["StockInicial"];
                if (dataRow["StockFinal"] != null)
                    StockFinal = (System.Decimal)dataRow["StockFinal"];
                if (dataRow["referencia"] != null)
                    referencia = (System.String)dataRow["referencia"];
            }
        }


        protected override void UpdateBind()
        {
            StringBuilder strCommand = new StringBuilder();
            strCommand.Append("UPDATE HISTORIAL set ");
            strCommand.Append("fechaModificacion='" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "'");
            strCommand.Append(",idUsuarioModificacion='" + this.idUsuarioModificacion.ToString() + "'");
            strCommand.Append(",idTipoRegistro='" + this.idTipoRegistro.ToString() + "'");
            strCommand.Append(",entrada='" + Convert.ToInt16(entrada) + "'");
            strCommand.Append(",salida='" + Convert.ToInt16(salida) + "'");
            strCommand.Append(",idVenta='" + this.idVenta.ToString() + "'");
            strCommand.Append(",idCompra='" + this.idCompra.ToString() + "'");
            strCommand.Append(",idProducto='" + this.idProducto.ToString() + "'");
            strCommand.Append(",idFactura='" + this.idFactura.ToString() + "'");
            strCommand.Append(",idCliente='" + this.idCliente.ToString() + "'");
            strCommand.Append(",idProveedor='" + this.idProveedor.ToString() + "'");
            strCommand.Append(",idCuentaBancaria='" + this.idCuentaBancaria.ToString() + "'");
            strCommand.Append(",idMovimientoBancario='" + this.idMovimientoBancario.ToString() + "'");
            strCommand.Append(",idAlmacen='" + this.idAlmacen.ToString() + "'");
            strCommand.Append(",idVendedor='" + this.idVendedor.ToString() + "'");
            strCommand.Append(",fechaAplicacion='" + fechaAplicacion.ToString("yyyy-MM-dd HH:mm:ss") + "'");
            strCommand.Append(",descripcion=\"" + WLMFunctions.comillas(descripcion) + "\"");
            strCommand.Append(",Monto=\"" + WLMFunctions.comillas(Monto) + "\"");
            strCommand.Append(",SaldoInicial=\"" + WLMFunctions.comillas(SaldoInicial) + "\"");
            strCommand.Append(",SaldoFinal=\"" + WLMFunctions.comillas(SaldoFinal) + "\"");
            strCommand.Append(",Cantidad=\"" + WLMFunctions.comillas(Cantidad) + "\"");
            strCommand.Append(",StockInicial=\"" + WLMFunctions.comillas(StockInicial) + "\"");
            strCommand.Append(",StockFinal=\"" + WLMFunctions.comillas(StockFinal) + "\"");
            strCommand.Append(",referencia=\"" + WLMFunctions.comillas(referencia) + "\"");
            strCommand.Append(" WHERE id='" + this.id + "'");
            ConexionDBInterna.ExecuteCommand(strCommand.ToString());
        }
        #endregion
    }

    public class RegistroHistorialCollection
    {
        private BaseClassArray<RegistroHistorial> _items;
        public BaseClassArray<RegistroHistorial> Elementos { get; set; }
        public RegistroHistorialCollection()
        {
        }
        public RegistroHistorialCollection(ref dbConnector ConexionDB)
        {
            string strCommand = "SELECT id FROM HISTORIAL ";
            OdbcDataReader dataReader = ConexionDB.ExecuteReader(strCommand);
            Elementos = new BaseClassArray<RegistroHistorial>();
            while (dataReader.Read())
            {
                RegistroHistorial newItem = new RegistroHistorial(Convert.ToInt32(dataReader["id"]), ref ConexionDB);
                Elementos.Add(newItem);
            }
            dataReader.Close();
            dataReader.Dispose();
        }
    }
}
